% RC电路滤波实验
clear; clc; close all;

%% 1. 系统函数
% H(s) = 1/(1 + sRC), H(jw) = 1/(1 + j*w*RC)
% 频率响应幅值 |H(jw)|

RC_list = [1e-4, 5e-4, 1e-3]; % 不同RC值
f = linspace(1, 10000, 2000); % 频率范围
w = 2*pi*f;

figure;
h = zeros(length(RC_list), length(f));
for i = 1:length(RC_list)
    RC = RC_list(i);
    H = 1 ./ abs(1 + 1j*w*RC);
    h(i,:) = H;
    semilogx(f, H, 'LineWidth', 2, 'DisplayName', ['RC=' num2str(RC)]); hold on;
end
xlabel('频率/Hz'); ylabel('|H(j\omega)|');
title('不同RC值的幅频响应'); grid on;
legend;

%% 2. 频率特性分析
% RC电路为低通滤波器，RC越大，截止频率越低

%% 3. 输入信号滤波与时域/频域分析
fs = 20000;           % 采样频率
T = 0.2;              % 信号时长
N = fs*T;
t = linspace(0, T, N);
x = cos(2*pi*100*t) + cos(2*pi*3000*t); % 输入信号

% 选择RC=1e-3进行滤波（截止频率约160Hz）
RC = 1e-3;
[b, a] = tfdata(tf(1, [RC 1]), 'v');
y = filter(b, a, x);

figure;
subplot(2,1,1);
plot(t, x, 'b'); hold on; plot(t, y, 'r');
legend('原信号','滤波后信号'); xlabel('时间/s'); ylabel('幅值');
title('时域波形对比'); grid on;

% 频谱分析
Xf = abs(fft(x));
Yf = abs(fft(y));
freq = (0:N-1)*(fs/N);
subplot(2,1,2);
plot(freq, Xf, 'b'); hold on; plot(freq, Yf, 'r'); xlim([0 5000]);
legend('原信号','滤波后信号'); xlabel('频率/Hz'); ylabel('幅度');
title('频域幅度谱对比'); grid on;

%% 打印系统函数表达式
fprintf('RC电路系统函数：\nH(s) = 1/(1 + sRC)\nH(jw) = 1/(1 + j*w*RC)\n');
